home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 6: Level 6
/
17 Bit - Level 6 (1998)(Epic Marketing)[!].iso
/
quartz
/
q1082.dms
/
q1082.adf
/
src.lzh
/
Fig
/
GadgetStuff.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-07-18
|
3KB
|
158 lines
struct MetaGadget
{
struct Image Image;
LONG MutualExclude;
struct Gadget Gadget;
};
STATIC struct Gadget *FirstGadget = NULL,*LastGadget = NULL;
STATIC LONG Count = 0;
VOID
ClearGadgets()
{
struct MetaGadget *Meta;
struct Gadget *Gadget,*NextGadget;
Gadget = FirstGadget;
while(Gadget)
{
NextGadget = Gadget -> NextGadget;
Meta = (struct MetaGadget *)Gadget -> UserData;
if(Meta -> Image . ImageData)
FreeMem(Meta -> Image . ImageData,byte(Gadget -> Width) * Gadget -> Height);
FreeMem(Meta,sizeof(struct MetaGadget) + 10);
Gadget = NextGadget;
}
FirstGadget = NULL;
}
struct Gadget *
AddMyGadget(SHORT LeftEdge,SHORT TopEdge,SHORT Width,SHORT Height,LONG MutualExclude,BYTE Selected,UWORD *ImageData)
{
struct MetaGadget *Meta;
if(Meta = (struct MetaGadget *)AllocMem(sizeof(struct MetaGadget) + 10,MEMF_PUBLIC|MEMF_CLEAR))
{
if(Meta -> Image . ImageData = (UWORD *)AllocMem(byte(Width) * Height,MEMF_CHIP|MEMF_CLEAR))
{
Meta -> Image . Width = Width;
Meta -> Image . Height = Height;
Meta -> Image . Depth = 1;
Meta -> Image . PlanePick = 1;
CopyMem(ImageData,Meta -> Image . ImageData,byte(Width) * Height);
if(LastGadget)
LastGadget -> NextGadget = &Meta -> Gadget;
LastGadget = &Meta -> Gadget;
if(!FirstGadget)
FirstGadget = &Meta -> Gadget;
Meta -> Gadget . LeftEdge = LeftEdge;
Meta -> Gadget . TopEdge = TopEdge;
Meta -> Gadget . Width = Width;
Meta -> Gadget . Height = Height;
Meta -> Gadget . Flags = GADGHCOMP|GADGIMAGE;
if(Selected)
Meta -> Gadget . Flags |= SELECTED;
Meta -> Gadget . Activation = GADGIMMEDIATE|TOGGLESELECT;
Meta -> Gadget . GadgetType = BOOLGADGET;
Meta -> Gadget . GadgetRender = &Meta -> Image;
Meta -> Gadget . GadgetID = Count++;
Meta -> Gadget . UserData = Meta;
if(MutualExclude != -1)
Meta -> MutualExclude = (1 << MutualExclude);
return(&Meta -> Gadget);
}
else
FreeMem(Meta,sizeof(struct MetaGadget) + 10);
}
return(NULL);
}
VOID
RefreshGadget(struct Window *Window,struct Gadget *Gadget)
{
struct Gadget *NextGadget = Gadget -> NextGadget;
Gadget -> NextGadget = NULL;
RefreshGadgets(Gadget,Window,NULL);
Gadget -> NextGadget = NextGadget;
}
LONG
HandleGadget(struct Window *Window,struct IntuiMessage *Massage)
{
STATIC BYTE Mutuals[] =
{
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,0,0,1,1,
1,1,1,1,0,0,1,1,1
};
struct Gadget *Gadget;
struct Gadget *MyGadget;
if(Massage -> Class == GADGETDOWN)
{
LONG MutualExclude;
MyGadget = Massage -> IAddress;
ReplyMsg(&Massage -> ExecMessage);
if(MutualExclude = ((struct MetaGadget *)MyGadget -> UserData) -> MutualExclude)
{
Gadget = FirstGadget;
while(Gadget)
{
if(Gadget != MyGadget)
{
if((((struct MetaGadget *)Gadget -> UserData) -> MutualExclude & MutualExclude) && Gadget -> Flags & SELECTED)
{
Gadget -> Flags &= ~SELECTED;
RefreshGadget(Window,Gadget);
}
}
Gadget = Gadget -> NextGadget;
}
if(!(MyGadget -> Flags & SELECTED) && Mutuals[MyGadget -> GadgetID])
{
MyGadget -> Flags |= SELECTED;
RefreshGadget(Window,MyGadget);
}
}
return((LONG)MyGadget -> GadgetID);
}
else
return(-1);
}